﻿package net.libra.loader
{
	import flash.events.IEventDispatcher;	

	/**
	 * 加载器。对象负责远程加载需要的数据或资源。
	 * @author DanielLu
	 */
	public interface ILoader extends IEventDispatcher
	{
		/**
		 * 开始加载数据或资源。
		 */
		function doLoad () : void;

		/**
		 * 返回加载的数据。
		 * @return		加载的数据。
		 */
		function getData () : Object;
		
		/**
		 * 是否正在加载
		 * @return		当前对象是否正在加载资源
		 */
		function isLoading () : Boolean;

		/**
		 * 添加加载完成的侦听器。
		 * @param listener			侦听器
		 * @param priority			优先级
		 * @param useWeakReference	使用弱引用
		 */
		function addCompleteListener (listener : Function,priority : int = 0,useWeakReference : Boolean = false) : void;

		/**
		 * 删除加载完成的侦听器。
		 * @param listener		侦听器。
		 */
		function removeCompleteListener (listener : Function) : void;

		/**
		 * 添加加载失败的侦听器。
		 * @param listener			侦听器
		 * @param priority			优先级
		 * @param useWeakReference	使用弱引用
		 */
		function addFailureListener (listener : Function,priority : int = 0,useWeakReference : Boolean = false) : void;

		/**
		 * 删除加载失败的侦听器。
		 * @param listener		侦听器。
		 */
		function removeFailureListener (listener : Function) : void;

		/**
		 * 添加加载侦听器。
		 * @param listener			侦听器
		 * @param priority			优先级
		 * @param useWeakReference	使用弱引用
		 */
		function addProgressListener (listener : Function,priority : int = 0,useWeakReference : Boolean = false) : void;

		/**
		 * 删除加载侦听器。
		 * @param listener		侦听器。
		 */
		function removeProgressListener (listener : Function) : void;
	}
}
